package com.example.demo.controller;


import com.example.demo.common.AjaxResult;
import com.example.demo.common.AppVariable;
import com.example.demo.common.UserSessionUtils;
import com.example.demo.entity.Articleinfo;
import com.example.demo.entity.Commentsinfo;
import com.example.demo.entity.ReplayCommentsinfo;
import com.example.demo.entity.Userinfo;
import com.example.demo.service.ArticleService;
import com.example.demo.service.CommentsService;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/comments")
public class CommentsController {

    @Autowired
    private UserService userService;
    @Autowired
    private ArticleService articleService;
    @Autowired
    private CommentsService commentsService;



    // 添加评论 也要将所属作者头像添加进去
    @RequestMapping("/addcomments")
    public AjaxResult addcomments(Commentsinfo commentsinfo, HttpServletRequest request){
        //判断是否有内容
        if (commentsinfo.getContent()==""){
            return AjaxResult.fail(-1,"请先输入评论内容",null);
        }
        //判断是用户是否登录，获取登录用户对象，取用户id，赋值到uid
        Userinfo userinfo = UserSessionUtils.getSessionUser(request);
        //判断用户是否登录
        if (userinfo==null || userinfo.getId()<=0){
            return AjaxResult.fail(-1,"请先登录再评论",null);
        }
        int uid = userinfo.getId();  //获取当前登录的用户id
        commentsinfo.setUid(uid); // 在评论信息中添加所属用户id
        //将所属用户的头像添加到评论表中
        String photo = userinfo.getPhoto();
        commentsinfo.setPhoto(photo);

        //评论所属文章id（aid）已经在commentsinfo里面了

        //获取当前时间，作为评论创建时间
        commentsinfo.setCreatetime(LocalDateTime.now());

        //将评论信息插入到数据库中
        return AjaxResult.success(commentsService.addComments(commentsinfo));
    }

    //根据文章id（aid）获取评论
    @RequestMapping("/getcomments")
    public AjaxResult getcommentsbyaid(Integer aid){
        //合法性判断
        if (aid == null||aid<=0){
            return AjaxResult.fail(-1,"获取评论失败，请刷新重试",null);
        }
        //返回获取的评论列表
        List<Commentsinfo> list = commentsService.getcommentsbyaid(aid);

        return AjaxResult.success(list);
    }

    //赞  一级评论
    @RequestMapping("/addgcount")
    public AjaxResult addGCount(Integer id){
        System.out.println("赞的评论id为："+id);
        return AjaxResult.success(commentsService.addGCount(id));
    }

    //踩  一级评论
    @RequestMapping("/addbcount")
    public AjaxResult addBCount(Integer id){
        return AjaxResult.success(commentsService.addBCount(id));
    }


    //根据评论的id，获取评论的回复列表
    @RequestMapping("/getreplaycomments")
    public AjaxResult getReplayCommentsByCid(Integer id){
        //合法性判断
        if (id==null || id<=0){
            return AjaxResult.fail(-1,"获取评论回复列表失败",null);
        }
        //根据cid在数据库中找对应回复信息
        List<ReplayCommentsinfo> replayCommentsinfos = commentsService.getReplayCommentsByCid(id);
        return AjaxResult.success(replayCommentsinfos);

    }


    //删除
    //只能登录之后删除，并且删除只能删除自己的评论   向服务器传此评论id，当前文章id（aid）
    //根据评论id，找到所属作者id（uid），再判断uid和当前登录用户id是否相同，相同则删除，不同则返回您没有权限删除此评论
    //                                 找到对应作者id后，判断当前登录id是否是作者id，如果是，则可以删除任意评论
    //前端传数据为 当前评论id，文章id（aid）
    @RequestMapping("delcomments")
    public AjaxResult delcomments(Integer id,Integer aid,HttpServletRequest request){
        //判断用户是否登录
        Userinfo userinfo = UserSessionUtils.getSessionUser(request);
        if (userinfo==null||userinfo.getId()<=0){
            return AjaxResult.fail(-1,"请先登录后再删除",null);
        }
        //得到当前登录用户的id
        int uid = userinfo.getId();

        //判断是否是管理员，如果是直接删除
        int admin = userinfo.getAdmin();
        if (admin == 1){
            //直接删除
            commentsService.delCommentsById(id);
            return AjaxResult.success(200,"删除成功",1);
        }



        //然后判断当前用户是否是本文作者
        //根据aid在文章表里面找到对应的uid
        int auid = articleService.getUidByAid(aid);
        //判断当前登录用户是否是文章作者
        if (auid == uid){
            //如果是，直接删除
            commentsService.delCommentsById(id);
            return AjaxResult.success(1);
        }
        //如果不是进行下面的判断

        //根据评论id，找到其uid，再跟当前登录用户id比较，相同返回删除成功，不同返回您无权删除此条评论
        //根据评论id找到对应uid
        int cuid = commentsService.getUidById(id);
        if (uid == cuid){
            //如果能对应上，进行删除
            commentsService.delCommentsById(id);
            return AjaxResult.success(200,"删除成功",1);
        }else {
            return AjaxResult.fail(-1,"您无权删除此条评论",null);
        }

    }




    //回复评论
    //点击回复按钮，聚焦输入框，修改点击发送调用的函数，
    //点击发送，将回复的内容发送到后端 发送成功后将发送按钮内的发送函数复原
    //服务器根据传来的回复内容，评论id（cid），再获取当前登录的用户id（uid），再创建回复时间，然后插入到replaycomments数据库中
    //前端发送到后端数据：回复内容，评论id（aid）
    //添加评论的回复
    @RequestMapping("addreplaycomments")
    public AjaxResult addReplayComments(ReplayCommentsinfo replayCommentsinfo,HttpServletRequest request){
        //获取当前登录用户
        Userinfo userinfo = UserSessionUtils.getSessionUser(request);
        if (userinfo.getId()<=0 || userinfo.getId()==null){
            return AjaxResult.fail(-1,"请先登录后再回复",null);
        }
        replayCommentsinfo.setUid(userinfo.getId());
        replayCommentsinfo.setCreatetime(LocalDateTime.now());
        replayCommentsinfo.setPhoto(userinfo.getPhoto());
        //插入到replaycomments表中
        return AjaxResult.success(commentsService.addReplayComments(replayCommentsinfo));
    }



    //赞  二级评论
    @RequestMapping("/addgcount2")
    public AjaxResult addGCount2(Integer id){
        System.out.println("赞的评论id为："+id);
        return AjaxResult.success(commentsService.addGCount2(id));
    }

    //踩  二级评论
    @RequestMapping("/addbcount2")
    public AjaxResult addBCount2(Integer id){
        return AjaxResult.success(commentsService.addBCount2(id));
    }


    //删除
    //只能登录之后删除，并且删除只能删除自己的评论   向服务器传此评论id，当前文章id（aid）
    //根据评论id，找到所属作者id（uid），再判断uid和当前登录用户id是否相同，相同则删除，不同则返回您没有权限删除此评论
    //                                 找到对应作者id后，判断当前登录id是否是作者id，如果是，则可以删除任意评论
    //前端传数据为 当前评论id，文章id（aid）
    @RequestMapping("delcomments2")
    public AjaxResult delcomments2(Integer id,Integer aid,HttpServletRequest request){
        //判断用户是否登录
        Userinfo userinfo = UserSessionUtils.getSessionUser(request);
        if (userinfo==null||userinfo.getId()<=0){
            return AjaxResult.fail(-1,"请先登录后再删除",null);
        }
        //得到当前登录用户的id
        int uid = userinfo.getId();

        //判断是否是管理员，如果是直接删除
        int admin = userinfo.getAdmin();
        if (admin == 1){
            //直接删除
            commentsService.delCommentsById2(id);
            return AjaxResult.success(200,"删除成功",1);
        }

        //然后判断当前用户是否是本文作者    给管理员权限
        //根据aid在文章表里面找到对应的uid
        int auid = articleService.getUidByAid(aid);
        //判断当前登录用户是否是文章作者
        if (auid == uid){
            //如果是，直接删除
            commentsService.delCommentsById2(id);
            return AjaxResult.success(1);
        }
        //如果不是进行下面的判断

        //根据评论id，找到其uid，再跟当前登录用户id比较，相同返回删除成功，不同返回您无权删除此条评论
        //根据评论id找到对应uid
        int ruid = commentsService.getUidById2(id);
        if (uid == ruid){
            //如果能对应上，进行删除
            commentsService.delCommentsById2(id);
            return AjaxResult.success(200,"删除成功",1);
        }else {
            return AjaxResult.fail(-1,"您无权删除此条评论",null);
        }

    }

    //回复二级评论
    //点击回复按钮，聚焦输入框，修改点击发送调用的函数，
    //点击发送，将回复的内容发送到后端 发送成功后将发送按钮内的发送函数复原
    //服务器根据传来的回复内容，评论id（rid），再获取当前登录的用户id（uid），再创建回复时间，根据rid查找回复的评论的cid，然后插入到replaycomments数据库中
    //前端发送到后端数据：回复内容，评论id（aid）
    //添加评论的回复
    @RequestMapping("addreplaycomments2")
    public AjaxResult addReplayComments2(ReplayCommentsinfo replayCommentsinfo,HttpServletRequest request){
        //获取当前登录用户
        Userinfo userinfo = UserSessionUtils.getSessionUser(request);
        if ( userinfo==null || userinfo.getId()<=0){
            return AjaxResult.fail(-1,"请先登录后再回复",null);
        }
        replayCommentsinfo.setUid(userinfo.getId());
        replayCommentsinfo.setCreatetime(LocalDateTime.now());
        //找到对应的cid
        replayCommentsinfo.setCid(commentsService.getCidByRid(replayCommentsinfo.getRid()));
        replayCommentsinfo.setPhoto(userinfo.getPhoto());

        //插入到replaycomments表中
        return AjaxResult.success(commentsService.addReplayComments2(replayCommentsinfo));
    }


}
